=========================================================================== BBS: The Abacus * HST/DS * Potterville, MI Date: 03-20-93 (03:39) Number: 93 From: STEVE GARTRELL Refer#: NONE To: ALL Recvd: NO Subj: rotate, no tabs Conf: (35) Quick Basi --------------------------------------------------------------------------- DEFINT A-Z DECLARE SUB RotateArray (SourceArray%(), TargetArray%(), Angle%) 'Must have the appropriate QB.QLB/QBX.QLB/VBDOS.QLB loaded ' if in the environment-link with appropriate library.... DECLARE SUB ABSOLUTE (Var%, BYVAL HowFar%, address AS INTEGER) CONST C$ = "Recreated 03/14/93 by Steve Gartrell" CONST NumBytes = 21 '$STATIC DIM SHARED RORproc%(1 TO (NumBytes / 2)) '$DYNAMIC DIM SHARED BitsPP%, Planes%, MaskBits%, MathNotDone% DIM SHARED yResult&(1 TO 3), xResult%(1 TO 3), VertOrient% DIM TheScreens%(1 TO 9) offset% = VARPTR(RORproc%(1)) FOR byte% = 0 TO NumBytes - 1 READ opcode% POKE (offset% + byte%), opcode% NEXT byte% TheScreens%(1) = 1 TheScreens%(2) = 2 TheScreens%(3) = 7 TheScreens%(4) = 8 TheScreens%(5) = 9 TheScreens%(6) = 11 TheScreens%(7) = 12 TheScreens%(8) = 13 ScrCnt% = 8 VertOrient% = 0 DO SCREEN TheScreens%(ScrCnt%) MaskBits% = 128 SELECT CASE TheScreens%(ScrCnt%) CASE 1 MaskBits% = 192 BitsPP% = 2: Planes% = 1 ColorMod% = 3 CASE 2, 11 BitsPP% = 1: Planes% = 1 ColorMod% = 2 IF TheScreens%(ScrCnt%) = 11 THEN WIDTH , 60 CASE 7, 8, 9, 12 BitsPP% = 1: Planes% = 4 ColorMod% = 16 SELECT CASE TheScreens%(ScrCnt%) CASE 9 WIDTH , 43 CASE 12 WIDTH , 60 END SELECT CASE 13 MaskBits% = 255 BitsPP% = 8: Planes% = 1 ColorMod% = 256 END SELECT 'StartX% = 152: StartY% = 56: EndX% = 175: EndY% = 79 StartX% = 64: StartY% = 0: EndX% = 263: EndY% = 199 NumCols% = (EndX% - StartX%) + 1: NumRows% = (EndY% - StartY%) + 1 ArrayBytes& = 4 + INT(((NumCols% * BitsPP%) + 7) / 8) * Planes% * NumRow REDIM SourceArray%(0 TO ArrayBytes& \ 2) REDIM TargetArray%(0 TO 20) FOR TheLine% = 1 TO 25 LOCATE TheLine%, 1 FOR cnt% = 9 TO 33 SELECT CASE TheScreens%(ScrCnt%) CASE 1, 2, 11 CASE ELSE thecolor% = thecolor% + 1 IF thecolor% > 15 THEN thecolor% = 1 COLOR thecolor% END SELECT 'PRINT CHR$(cnt% MOD 3 + 60); LOCATE TheLine%, cnt% PRINT CHR$(cnt% MOD 10 + 48); NEXT NEXT LOCATE 8, 20: PRINT "123"; LOCATE 9, 20: PRINT "456"; LOCATE 10, 20: PRINT "789"; GET (StartX%, StartY%)-(EndX%, EndY%), SourceArray%(0) MathNotDone% = -1 Angle% = 0 DO DO: t$ = UCASE$(INKEY$): LOOP UNTIL LEN(t$) SELECT CASE t$ CASE "Q" 'QUIT!!!!! SCREEN 0: WIDTH 80, 25: COLOR 7, 0: END CASE "N" 'CHANGE SCREEN MODE!!! ScrCnt% = ScrCnt% + 1 IF ScrCnt% = 9 THEN ScrCnt% = 1 EXIT DO CASE "V" 'Toggle vertical orientation VertOrient% = NOT VertOrient% END SELECT Angle% = (Angle% + 90) MOD 360 RotateArray SourceArray%(), TargetArray%(), Angle% PUT (StartX%, StartY%), TargetArray%(0), PSET LOCATE 25, 1: PRINT USING "###"; Angle%; PRINT CHR$(248); " "; LOOP LOOP RotRight: DATA &H55 : 'push bp DATA &H8B,&HEC : 'mov bp, sp DATA &H51 : 'push cx DATA &H8B,&H4E,&H06 : 'mov cx, [bp + 6] DATA &H8B,&H5E,&H08 : 'mov bx, [bp + 8] DATA &H8B,&H07 : 'mov ax, [bx] DATA &HD2,&HC8 : 'ror al, cl DATA &H89,&H07 : 'mov [bx], ax DATA &H59 : 'pop cx DATA &H5D : 'pop bp DATA &HCA,&H04,&H00 : 'retf 4 SUB RotateArray (SourceArray%(), TargetArray%(), Angle%) DIM SourcePix%(1 TO 4) DIM SourceBitsPP%, SourceBytesPerRow&, SourceRowOffset& DIM SourceX%, SourceY%, BytePosCopy&, SourceBytePos& DIM SourceRightMove%, SourceBitMask%, SourceToTargetDiff% DIM TargetBitsPP%, TargetBytesPerRow&, TargetRowOffset& DIM TargetRightMove%, TargetBytePos&, TargetX%, TargetY% DIM WhichBits%, NumCols%, NumRows% SELECT CASE BitsPP% CASE 1 WhichBits% = 7 CASE 2 WhichBits% = 3 CASE 8 WhichBits% = 0 END SELECT SourceBitsPP% = SourceArray%(0) NumCols% = SourceBitsPP% \ BitsPP% NumRows% = SourceArray%(1) IF Angle% MOD 180 THEN 'Make it square if it's not!!! SELECT CASE NumRows% - NumCols% CASE IS < 0 NumCols% = NumRows% CASE IS > 0 NumRows% = NumCols% END SELECT END IF TargetBitsPP% = NumCols% * BitsPP% IF TargetBitsPP% AND 7 THEN TargetBytesPerRow& = (TargetBitsPP% \ 8 + 1) * Planes% ELSE TargetBytesPerRow& = (TargetBitsPP% \ 8) * Planes%